package com.sisgesbyte.services.sistema;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.LocalDetRequest;
import com.sisgesbyte.dao.sistema.MantenimientoLocalDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.sistema.LocalesListaEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.LocalBean;
import com.sisgesbyte.services.sistema.bean.LocalListaResponse;

@Stateless
public class MantenimientoLocalImpl implements MantenimientoLocal {

	@EJB
	private MantenimientoLocalDao mantenimientoLocalDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public LocalListaResponse mostrarLocales(String codTransaccion) {
		String mensajeTransaccionMetodo = "[mostrarLocales idTx=" + codTransaccion + "] - ";
		LocalListaResponse response = new LocalListaResponse();
		List<LocalesListaEntity> reqLocal = null;
		
		try{
			response.setIdTransaccion(codTransaccion);
			try{
				reqLocal = mantenimientoLocalDao.listarLocales();
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el local en BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_LOCAL_COD_IDT34);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_LOCAL_MSJ_IDT34);
				return response;
			}
			
			if(reqLocal.size()> 0){
				List<LocalBean> listLocales = new ArrayList<LocalBean>();
				for(LocalesListaEntity lista :reqLocal){
					LocalBean bean = new LocalBean();
					bean.setActive(lista.getActive());
					bean.setCodLocal(lista.getCod_local());
					bean.setDescripcion(validaciones.validarCamposString(lista.getDescripcion()));
					bean.setDireccion(validaciones.validarCamposString(lista.getDireccion()));
					bean.setEmpresaId(lista.getEmpresa_id());
					bean.setId(lista.getId());
					bean.setIpLocal(validaciones.validarCamposString(lista.getIp_local()));
					bean.setRazonSocial(validaciones.validarCamposString(lista.getRazon_social()));
					bean.setTelefono(validaciones.validarCamposString(lista.getTelefono()));
					listLocales.add(bean);
				}
				response.setListaLocales(listLocales);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_LOCAL_COD_IDF33);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_LOCAL_MSJ_IDF33);
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso");
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_LOCAL_COD_IDT34);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_LOCAL_MSJ_IDT34);
			return response;
		}
		return response;
	}

	@Override
	public GenericResponse nuevoLocal(String codTransaccion, LocalBean local) {
		String mensajeTransaccionMetodo = "[nuevoLocal idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		try{
			GenericEntity reqLocal = null; 
			LocalDetRequest newLocal = new LocalDetRequest();
			newLocal.setActive(local.getActive());
			newLocal.setCodEmpresa(validaciones.validarCampoInteger(local.getEmpresaId()));
			newLocal.setCodLocal(validaciones.validarCamposString(local.getCodLocal()));
			newLocal.setDescripcion(validaciones.validarCamposString(local.getDescripcion()));
			newLocal.setDireccion(validaciones.validarCamposString(local.getDireccion()));
			newLocal.setIpLocal(validaciones.validarCamposString(local.getIpLocal()));
			newLocal.setRepresentante(validaciones.validarCamposString(local.getRepresentante()));
			newLocal.setTelefono(validaciones.validarCamposString(local.getTelefono()));
			try{
				reqLocal = mantenimientoLocalDao.guardarLocal(newLocal);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el usuario en BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_LOCAL_COD_IDT35);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_LOCAL_MSJ_IDT35);
				return response;
			}
			if(reqLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_LOCAL_COD_IDF34);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_LOCAL_MSJ_IDF34);
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "hubo un error en el proceso");
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_LOCAL_COD_IDT35);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_LOCAL_MSJ_IDT35);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse editLocal(String codTransaccion, LocalBean local) {
		String mensajeTransaccionMetodo = "[editLocal idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity reqLocal = null; 
			LocalDetRequest editLocal = new LocalDetRequest();
			editLocal.setIdLocal(local.getId());
			editLocal.setActive(local.getActive());
			editLocal.setCodEmpresa(validaciones.validarCampoInteger(local.getEmpresaId()));
			editLocal.setCodLocal(validaciones.validarCamposString(local.getCodLocal()));
			editLocal.setDescripcion(validaciones.validarCamposString(local.getDescripcion()));
			editLocal.setDireccion(validaciones.validarCamposString(local.getDireccion()));
			editLocal.setIpLocal(validaciones.validarCamposString(local.getIpLocal()));
			editLocal.setRepresentante(validaciones.validarCamposString(local.getRepresentante()));
			editLocal.setTelefono(validaciones.validarCamposString(local.getTelefono()));
			try{
				reqLocal = mantenimientoLocalDao.actualizarLocal(editLocal);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el usuario en BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_LOCAL_COD_IDT36);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_LOCAL_MSJ_IDT36);
				return response;
			}
			if(reqLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_LOCAL_COD_IDF35);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_LOCAL_MSJ_IDF35);
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "hubo un error en el proceso");
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_LOCAL_COD_IDT36);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_LOCAL_MSJ_IDT36);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteLocal(String codTransaccion, int codLocal) {
		String mensajeTransaccionMetodo = "[deleteLocal idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity reqLocal = mantenimientoLocalDao.eliminarLocal(codLocal);
			
			if(reqLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_LOCAL_COD_IDF36);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_LOCAL_MSJ_IDF36);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el usuario en BD");
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_LOCAL_COD_IDT37);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_LOCAL_MSJ_IDT37);
		}
		
		return response;
	}

}
